﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Galaktika.BI.Silverlight.Intermediate;

namespace Galaktika.BI.Charting.PivotChart
{
    /// <summary>
    /// Свойства для линейных диаграмм
    /// </summary>
    public class LineChartProperties
    {
        public LineChartProperties()
        {
            m_InternalUpdating = true;

            //Устанавливаем настройки по-умолчанию
            SetDefaultSettings();

            m_InternalUpdating = false;
            //RaisePropertyChanged();
        }

        /// <summary>
        /// Флаг внутреннего обновления значений. 
        /// </summary>
        protected bool m_InternalUpdating;

        /// <summary>
        /// Событие - произошло изменение свойств
        /// </summary>
        public event EventHandler PropertyChanged;

        protected void RaisePropertyChanged()
        {
            //В случае внутреннего обновления значений событие не генерируем
            if (m_InternalUpdating)
                return;

            EventHandler handler = PropertyChanged;
            if (handler != null)
                handler(this, EventArgs.Empty);
        }

        /*private LineSeriesPropertiesCollection m_GeneralSeriesProperties = new LineSeriesPropertiesCollection(this);
        public LineSeriesPropertiesCollection SeriesCollection
        {
            get {
                if(m_GeneralSeriesProperties == null)
                    m_GeneralSeriesProperties = new LineSeriesPropertiesCollection();
                return m_GeneralSeriesProperties;
            }
            set {
                m_GeneralSeriesProperties = value;
                RaisePropertyChanged();
            }
        }*/

        #region Свойства для Line - Диаграмм
        private Rect m_Padding;
        /// <summary>
        /// Определяет отступы (X-слева, Y-сверху, Width-справа, Height-снизу) для графика
        /// </summary>
        public Rect Padding
        {
            get
            {
                return m_Padding;
            }
            set
            {
                m_Padding = value;
                RaisePropertyChanged();
            }
        }

        #region Подписи для осей
        private String m_XCaption;
        /// <summary>
        /// Пользовательская надпись по оси X
        /// </summary>
        public String XCaption
        {
            get { return m_XCaption; }
            set
            {
                m_XCaption = value;
                RaisePropertyChanged();
            }
        }

        private String m_YCaption;
        /// <summary>
        /// Пользовательская надпись по оси Y
        /// </summary>
        public String YCaption
        {
            get { return m_YCaption; }
            set
            {
                m_YCaption = value;
                RaisePropertyChanged();
            }
        }
        #endregion Подписи для осей

        private bool m_UseInvertion;
        /// <summary>
        /// True - перевёрнутый график. По оси X размещается ось Y и наоборот.
        /// </summary>
        public bool UseInvertion
        {
            get
            {
                return m_UseInvertion;
            }
            set
            {
                m_UseInvertion = value;
                RaisePropertyChanged();
            }
        }

        private double m_XValuesAngle;
        /// <summary>
        /// Угол поворота подписей по оси Х
        /// </summary>
        public double XValuesAngle
        {
            get
            {
                return m_XValuesAngle;
            }
            set
            {
                m_XValuesAngle = value;
                RaisePropertyChanged();
            }
        }

        private int m_HorzScale;
        /// <summary>
        /// Расстояние между соседними элементами на горизонтальной шкале.
        /// </summary>
        public int HorzScale
        {
            get
            {
                return m_HorzScale;
            }
            set
            {
                m_HorzScale = value;
                RaisePropertyChanged();
            }
        }

        private bool m_ShowXLabels;
        /// <summary>
        /// Видимость значений по оси Х
        /// </summary>
        public bool ShowXLabels
        {
            get
            {
                return m_ShowXLabels;
            }
            set
            {
                m_ShowXLabels = value;
                RaisePropertyChanged();
            }
        }

        private bool m_ShowYLabels;
        /// <summary>
        /// Видимость оси Y
        /// </summary>
        public bool ShowYLabels
        {
            get
            {
                return m_ShowYLabels;
            }
            set
            {
                m_ShowYLabels = value;
                RaisePropertyChanged();
            }
        }

        private bool m_AutoGenerateSeries;
        /// <summary>
        /// Нужно ли генерировать серии автоматически  
        /// </summary>
        public bool AutoGenerateSeries
        {
            get
            {
                return m_AutoGenerateSeries;
            }
            set
            {
                m_AutoGenerateSeries = value;
                RaisePropertyChanged();
            }
        }
        #endregion Свойства для Line - Диаграмм

        /// <summary>
        /// Устанавливает настройки по-умолчанию
        /// </summary>
        public void SetDefaultSettings()
        {
            Padding = new Rect(40,20,20,40);            
            
            XCaption = String.Empty;
            YCaption = String.Empty;
            UseInvertion = false;
            XValuesAngle = 0;
            HorzScale = 0;

            ShowXLabels = true;
            ShowYLabels = true;
            AutoGenerateSeries = false;
            //SeriesCollection = new LineSeriesPropertiesCollection();
        }
    }
}
